package entity

import (
	"server/world/scene"
)

var _ scene.Entity = (*Obstacle)(nil)

// Obstacle 障碍物实体，实现Entity接口
type Obstacle struct {
	Entity
	Width    float64 // 宽度
	Height   float64 // 高度
	IsStatic bool    // 是否静态障碍物
}

// NewObstacle 创建新的障碍物实体
func NewObstacle(id int64, width, height float64, x, y float64, isStatic bool) *Obstacle {
	o := &Obstacle{
		Width:    width,
		Height:   height,
		IsStatic: isStatic,
	}
	o.id = id
	o.x, o.y = x, y
	return o
}

// GetType 获取实体类型，实现Entity接口
func (o *Obstacle) GetType() scene.EntityType {
	return scene.EntityTypeObstacle
}

// Remove 移除障碍物实例
func (o *Obstacle) Remove() {
	if o.layer == nil {
		return
	}
	layer := o.layer
	layer.Remove(o, o.x, o.y)
}

// UpdatePosition 更新障碍物位置（仅对非静态障碍物有效）
func (o *Obstacle) UpdatePosition(newX, newY float64) {
	if o.layer == nil || o.IsStatic {
		return
	}
	if !o.SetStatus(scene.EntityStatusNone, scene.EntityStatusMovement) {
		return
	}
	defer func() {
		o.status = int32(scene.EntityStatusNone)
	}()

	layer := o.layer
	if layer.Move(o, newX, newY) {
		o.x, o.y = newX, newY
	}
}